Adding and configuring services in ASP.NET Core

ASP.NET Core में सर्विसेज को जोड़ना और कॉन्फ़िगर करना

इस लेख में हम समझेंगे कि सर्विस का क्या अभिप्राय है और सर्विस किस प्रकार हमारे .NET एप्लीकेशन को मॉड्यूलर बनाती है।

सर्विस का अभिप्राय मूल रूप से एक क्लास के भीतर उपलब्ध कार्यक्षमता (functionality) से है जिसका उपयोग किसी दूसरे क्लास के द्वारा किया जा सकता है। जब यह क्लास की कार्यक्षमता को दूसरा क्लास उपयोग करता है, तो पहले क्लास की कार्यक्षमता को दूसरे क्लास सर्विस के रूप में प्राप्त करता है। अतः, सर्विस अत्यंत ही सरल कॉन्सेप्ट है।

हमें समझना यह चाहिए कि सर्विस का उपयोग करके हम .NET Core एप्लीकेशन को अत्यंत मॉड्यूलर बना सकते हैं। इसके लिए हम एक क्लास के भीतर कुछ कार्यक्षमता रख देते हैं और उस क्लास को दूसरी क्लास के द्वारा उपयोग किया जाता है। एक बात ध्यान देने योग्य है कि सर्विस बनाते समय सिंगल रिस्पॉन्सिबिलिटी प्रिंसिपल (Single Responsibility Principle) का ध्यान रखा जाता है। कहने का अभिप्राय है कि एक क्लास के भीतर उतनी ही कार्यक्षमता दी जाती है जो अपने आप में पूर्ण हो, इस तरीके से सिंगल रिस्पॉन्सिबिलिटी प्रिंसिपल को निभाया जाता है।

.NET Core के भीतर एक सर्विस क्लास आप थर्ड-पार्टी पैकेज के रूप में प्राप्त कर सकते हैं अथवा बने-बनाए फ्रेमवर्क के द्वारा। दोनों ही तरीके से आप अपने सर्विस को एप्लीकेशन में उपयोग कर सकते हैं। किसी सर्विस को वेब एप्लीकेशन में उपयोग करने के लिए हमें डिपेंडेंसी इंजेक्शन (Dependency Injection) प्रिंसिपल का उपयोग करना होता है। .NET Core एप्लीकेशन के भीतर हम सर्विस को सर्विस कलेक्शन (Service Collection) नामक ऑब्जेक्ट के भीतर संग्रहित करते हैं। इसे इनवर्जन ऑफ कंट्रोल (Inversion of Control) भी कहते हैं क्योंकि इसके द्वारा क्लासेस के बीच में संबंध को लूज़ कर दिया जाता है और इसे टेक्निकल टर्म में लूजली कपल्ड सिस्टम (Loosely Coupled System) कहते हैं। इसके विपरीत, जब एक क्लास का निर्माण दूसरे क्लास के भीतर न्यू ऑपरेटर (new operator) की सहायता से की जाती है, तो वह सिस्टम टाइटली कपल्ड सिस्टम (Tightly Coupled System) होता है।

.NET Core को मॉड्यूलर बनाने के लिए हमारे पास एक कंटेनर होता है जो कंटेनर सर्विस को अपने भीतर संग्रहित करता है और एक दूसरा ऑब्जेक्ट सर्विस प्रोवाइडर (Service Provider) का होता है जो किसी भी सर्विस के ऑब्जेक्ट को प्रदान कर सकता है। जो क्लास किसी सर्विस को प्राप्त करना चाहता है, वह सर्विस प्रोवाइडर से ऑब्जेक्ट बना-बनाया प्राप्त कर लेता है, उसे खुद ऑब्जेक्ट बनाने की जरूरत नहीं पड़ती है।

.NET Core के भीतर आपको Startup.cs क्लास के भीतर ConfigureServices नाम का एक मेथड होता है, जिसके भीतर आप किसी भी सर्विस को सर्विस कलेक्शन के भीतर रजिस्टर कर सकते हैं। और जब जरूरत होगी, तो सर्विस प्रोवाइडर इसका एक ऑब्जेक्ट बनाकर एप्लीकेशन को दे देता है। इन सब कामों को करने के लिए डिपेंडेंसी इंजेक्शन के कॉन्सेप्ट को समझना जरूरी है।

डिपेंडेंसी से अभिप्राय एक ऐसे क्लास से है जो कंटेनर के भीतर उपलब्ध होता है और जब कोई दूसरा क्लास उसको प्राप्त करना चाहता है, तो उसको कंस्ट्रक्टर (constructor) के माध्यम से इंजेक्ट कर दिया जाता है अथवा मेथड के भीतर भी इंजेक्ट किया जा सकता है। इसके लिए [FromServices] नाम का एट्रीब्यूट का उपयोग किया जाता है।

आप .NET Core के भीतर उपलब्ध फ्रेमवर्क सर्विस को उपयोग करें अथवा अपना कोई बना-बनाया कस्टम क्लास के सर्विस को उपयोग करें, दोनों ही हालत में उसको सर्विस कलेक्शन नामक सर्विस कंटेनर के भीतर रजिस्टर करना होता है, तभी आप उस सर्विस का एक ऑब्जेक्ट प्राप्त कर सकते हैं।

सर्विस का ऑब्जेक्ट प्राप्त करने के लिए अलग-अलग मेथड उपलब्ध हैं। उदाहरण के लिए,

  • AddSingleton मेथड की सहायता से एप्लीकेशन के लाइफटाइम के दौरान एक सिंगल सर्विस का ऑब्जेक्ट क्रिएट होता है और उस ऑब्जेक्ट का उपयोग कोई भी दूसरा क्लास कर सकता है।
  • इसके विपरीत, AddTransient मेथड के द्वारा जब सर्विस का ऑब्जेक्ट क्रिएट किया जाता है, जब कोई भी क्लास उस ऑब्जेक्ट की मांग करता है, हर बार यह ऑब्जेक्ट क्रिएट होता है और उपयोग करने के बाद डिस्ट्रॉय हो जाता है।
  • इसी तरह एक और भी मेथड है जिसे AddScoped कहते हैं। इसकी मदद से भी आप किसी सर्विस के ऑब्जेक्ट को प्राप्त कर सकते हैं। इसका लाइफस्कोप जिस क्लास के भीतर इसकी मांग की जाती है, उसके लाइफटाइम पर निर्भर करती है।

टिप्पणियाँ

इस ब्लॉग से लोकप्रिय पोस्ट

Differences between in-process and out-of-process hosting models

Web Fundamental Concepts in Hindi for Beginners - FAQs with their Answers Part-1

Introduction to ASP.NET Core and Web Frameworks